/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"9758E737-14DB-4561-B180-62D8A51C106B",variableType:4}
 */
var gPtoVenta = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"9B6AD19E-00AD-4940-B166-C0CF35F0E60F",variableType:4}
 */
var gEmpresa = 1;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"6EFFE8C2-4A7F-465D-9E3D-0EF9D38C66F7"}
 */
var gArchEntrada = 'c:/factura_electronica/Entrada/entrada.txt';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"B1753E9B-F67C-4A23-BCA3-4804285B1757"}
 */
var gArchProceso = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"28B6F629-9C0C-45F9-B934-211A3F5F24D5"}
 */
var gArchSalida = 'c:/factura_electronica/Salida/salida.txt';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"4B00F18F-3AE3-4014-99C5-99B3EF7EB672"}
 */
var gCae = null;

/**
 * @properties={typeid:35,uuid:"CFE22505-40C7-43E0-A739-612DCC4123DC",variableType:-4}
 */
var gCod_barras = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"86BC4D6D-C5B8-4CCE-BAEC-6377F1FB4520"}
 */
var gCod_final = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"25AB6AD5-E7AB-446A-A20C-AC991E66B1D8"}
 */
var gCuit = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"78AB0BA1-7ABB-4E91-8870-9AE3C00FAE82"}
 */
var gDigito_verificador = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"8468F6E3-0118-451E-8C0B-7ABC57A8FD7B"}
 */
var gDirFacturas = 'c:/zirmer/fact-elect';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"A331C6AE-125D-4461-BE2D-5B66B4AA18E1"}
 */
var gDirFacturasHechas = 'c:/factura_electronica/Hechas';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"1A4FB781-40B4-4965-8D9C-C74505E1DFC8"}
 */
var gDirProcesadas = 'c:/factura_electronica/Procesadas';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"C49A90FB-986B-4387-96E9-79093BF9B179"}
 */
var gDirReimpresiones = 'c:/';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"9610B5CD-C412-44F1-AE34-9175381559F5"}
 */
var gDirSalidasRecibidas = 'c:/factura_electronica/Salidas-recibidas';

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"338FE70F-883C-42FF-AEDB-BB4EA9A1FDEB"}
 */
var gEstadoServicio = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"827A4486-D0B1-424F-93A8-605C46CB9682"}
 */
var gFechaVtoCae = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"582F09C0-E320-43AE-86D1-F855073C9546"}
 */
var gLetra = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"C54DA8E5-7879-43EF-8191-D2528C667D04"}
 */
var gMensajeError = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"CA5FDBB2-F1EE-4325-9352-381ACAE8C879"}
 */
var gMensajeLogfile = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"03A9C662-303B-492A-8ECD-AECDC88BCF55",variableType:4}
 */
var gNroCbte = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7854C5F1-F5EB-4D5D-BC42-9231E58BBF58",variableType:4}
 */
var gSenialStop = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"5F7E98A9-6263-4904-AE2F-FE2D999BB10A",variableType:4}
 */
var gSucursal;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"DA7B274C-E640-4BFE-B8EB-7407C435F688"}
 */
var gTipo_doc = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"7F18DA48-E9B3-43F0-8F26-189C2CD829DD",variableType:4}
 */
var gTipoCbte = null;

/**
 * @properties={typeid:24,uuid:"DD01B16C-4E89-42BD-8344-F507CA032340"}
 */
function pruebaRece() {

	globals.gArchEntrada 			= gempresa_to_empresas.path_arch_entrada
	globals.gArchSalida 			= gempresa_to_empresas.path_arch_salida
	globals.gDirFacturas 			= gempresa_to_empresas.path_facturas
	globals.gDirFacturasHechas 		= gempresa_to_empresas.path_facturas_hechas
	globals.gDirProcesadas 			= gempresa_to_empresas.path_procesadas
	globals.gDirReimpresiones 		= gempresa_to_empresas.path_reimpresiones
	globals.gDirSalidasRecibidas 	= gempresa_to_empresas.path_salidas_recibidas
	var $logfile 					= gempresa_to_empresas.path_log
	
	// Tomo archivos del directorio de Facturas
	var $archivos = plugins.file.getFolderContents(globals.gDirFacturas, '.DAT',  1,  1,  null)
	if ($archivos.length == 0)
	{
		return 0
	}
	for (var i = 1 ; i <= $archivos.length ; i++)
	{
		var $arch_proceso 		= $archivos[i-1]
		globals.gCae 			= null
		globals.gCod_barras 	= null
		globals.gCod_final 		= null
		globals.gLetra 			= null
		globals.gMensajeError 	= null
		globals.gMensajeLogfile = null
		globals.gNroCbte 		= null
		globals.gSucursal 		= null
		globals.gTipo_doc 		= null
		globals.gTipoCbte 		= null
		globals.gArchProceso 	= $arch_proceso.getAbsolutePath()
		
		// copia el archivo recibido al directorio de procesadas
		var $destino = globals.gDirProcesadas +'/'+ $arch_proceso.getName()
		var $exito1 = plugins.file.copyFile(globals.gArchProceso, $destino)
		if ($exito1)
		{
			// debe copiar a entrada  filtrando los articulos
			globals.leerArchivo()
			
			//Ejecuto el rece.exe y espero el resultado
			application.executeProgram(gempresa_to_empresas.path_rece_bat + '/rece1.bat',[gempresa_to_empresas.path_rece_bat, gempresa_to_empresas.path_rece_ini, $logfile])
			
			var $arch_salida = plugins.file.convertToJSFile(globals.gArchSalida)
			// copia salida a salidas-recibidas
			var $destino = globals.gDirSalidasRecibidas + '/'+ $arch_proceso.getName() 
			plugins.file.copyFile(globals.gArchSalida,$destino)
			
			// Analiza si la respuesta es correcta
			if ($arch_salida.size() > 194 && globals.verificar_cae($arch_salida) == 0)
			{
				if (globals.gProcesarArchivo(globals.gArchProceso) == 0)
				{
					var $rta = ' - Aprobado con CAE: ' + utils.stringTrim(plugins.file.readTXTFile($arch_salida).substr(171, 14))
					globals.gMensajeError   = $arch_proceso.getName() + $rta
					forms.inicial.fLog		= globals.gMensajeError + '\n' + forms.inicial.fLog
					globals.gMensajeLogfile = plugins.file.readTXTFile($logfile)

					if (gempresa_to_empresas.elec_codigo_imprime)
					{
						try
						{
							eval(gempresa_to_empresas.elec_codigo_imprime)
						}
						catch(e)
						{
							globals.gMensajeError   = $arch_proceso.getName() + ' - ERROR al generar PDF: ' + e
							forms.inicial.fLog		= globals.gMensajeError + '\n' + forms.inicial.fLog
						}
					}
					// borra entrada y salida de la interfase
					globals.gGrabarLog(globals.gTipoCbte, globals.gNroCbte, globals.gCae, $arch_proceso.getName(), globals.gMensajeError, globals.gMensajeLogfile, globals.gFechaVtoCae, globals.gPtoVenta)
					plugins.file.deleteFile(globals.gArchEntrada)
					plugins.file.deleteFile(globals.gArchSalida)
					// borra archivo procesado del origen
					plugins.file.deleteFile(globals.gArchProceso)
					plugins.file.deleteFile($logfile)
				}
				else
				{
					globals.gMensajeError   = $arch_proceso.getName() + ' - Error al guardar datos. CAE válido'
					forms.inicial.fLog		= globals.gMensajeError + '\n' + forms.inicial.fLog
					globals.gGrabarLog(globals.gTipoCbte, globals.gNroCbte, globals.gCae, $arch_proceso.getName(), globals.gMensajeError, globals.gMensajeLogfile, globals.gFechaVtoCae, globals.gPtoVenta)
					plugins.file.deleteFile(globals.gArchEntrada)
				}
			}
			else
			{
				var $msj = ''
				// error longitud o verificacion CAE
				if ($arch_salida.size() <= 194 )
				{
					$msj = 'Error Longitud archivo de salida = ' + $arch_salida.size()	
					globals.gMensajeError   = $arch_proceso.getName() + $msj
					forms.inicial.fLog		= globals.gMensajeError + '\n' + forms.inicial.fLog
					globals.gGrabarLog(0, 0, null, $arch_proceso.getName(), globals.gMensajeError, globals.gMensajeLogfile, null, 0)
				}
				else
				{
					var $error 	= '\nError : ' + utils.stringTrim(plugins.file.readTXTFile($arch_salida).substr(1200, 1000))
					var $motivo = '\n Motivo: ' + utils.stringTrim(plugins.file.readTXTFile($arch_salida).substr(194, 1000))
					$msj = 'No se obtuvo CAE'
					globals.gMensajeError   = $arch_proceso.getName() + $msj + $error + $motivo
					forms.inicial.fLog		= globals.gMensajeError + '\n' + forms.inicial.fLog
					globals.gMensajeLogfile = plugins.file.readTXTFile($logfile)
					globals.gGrabarLog(0, 0, null, $arch_proceso.getName(), globals.gMensajeError, globals.gMensajeLogfile, null, 0)
				}
				// para proceso
				if (gempresa_to_empresas.mail_host && gempresa_to_empresas.mail_puerto && gempresa_to_empresas.email && gempresa_to_empresas.mail_pass)
				{
					var $host 		= gempresa_to_empresas.mail_host
					var $puerto 	= gempresa_to_empresas.mail_puerto
					var $email 		= gempresa_to_empresas.email
					var $from 		= gempresa_to_empresas.descripcion
					var $pass 		= gempresa_to_empresas.mail_pass
					var $asunto 	= 'Factura Electrónica - Servicio Parado'
					var $mensaje	= 'El servicio de Factura Electrónica se ha detenido por el siguiente error\n' + $msj
					
					for (var i = 1; i <= gempresa_to_empresa_contactos.getSize() ; i++)
					{
						/** @type {JSRecord<db:/fwk_navigation_infocom/userv_contactos>}*/
						var $rcd 		= gempresa_to_empresa_contactos.getRecord(i)
						var $destino 	= $rcd.mail
						if (!globals.mandarMail($host, $puerto, $email, $from, $pass,1,$destino, $asunto, $mensaje, null))
							application.output(plugins.mail.getLastSendMailExceptionMsg())
					}
				}
				if (gempresa_to_empresas.modo_rechazo == 1)
				{
					globals.DIALOGS.showWarningDialog('Aviso',$msj,'OK')
					globals.gSenialStop = 1
				}
				else
				{
					plugins.file.deleteFile(globals.gArchProceso)
				}
				return gempresa_to_empresas.modo_rechazo
			}
		}
	}
	return 0
}

/**
 * @properties={typeid:24,uuid:"FDC83E46-E0D3-47AB-B561-B76E042B92AE"}
 */
function gProcesarArchivo(pArchivo) {
	databaseManager.setAutoSave(false)
	var fr = new Packages.java.io.FileReader(pArchivo);
	var br = new Packages.java.io.BufferedReader(fr);
	
	var linea = br.readLine()
	if (linea == null)
	{
		databaseManager.revertEditedRecords()
		databaseManager.setAutoSave(true)
		return 1
	}
	else
	{
		/** @type {JSFoundSet<db:/factura_electronica/factura_cab>} */
		var $fs_cab = databaseManager.getFoundSet('factura_electronica','factura_cab')
		
		globals.gCabecera($fs_cab,linea) //Paso la linea a la BD
		linea = br.readLine()
		while (linea != null) //Hasta que termine el archivo
		{
			globals.gProcesarLinea($fs_cab,linea)
			linea = br.readLine() //Leo otra linea del archivo
		}
	}
	br.close();
	fr.close();
	if (!databaseManager.saveData())
	{
		databaseManager.revertEditedRecords()
		databaseManager.setAutoSave(true)
		return 1
	}
	databaseManager.setAutoSave(true)
	return 0
}

/**
 * @properties={typeid:24,uuid:"263E6EC7-BD67-46CA-B548-7D3A3E3780AE"}
 */
function gProcesarLinea (pFs_cab,pLinea)
{	
	switch( pLinea[0] )
	{
	case '2':
		{
			globals.gIva(pFs_cab,pLinea)
			break;	
		}
	case '3': 
		{
			globals.gCbte(pFs_cab,pLinea)
			break;
		}
	case '4':
		{
			globals.gDetalle(pFs_cab,pLinea)
			break;	
		}
	case '9':
		{
			globals.gCabecera_2(pFs_cab,pLinea)
			break;	
		}
	default:
		{
			application.output('ERROR')
			break;
		}
	}
}

/**
 * @param {JSFoundSet<db:/factura_electronica/factura_cab>} pFs_cab
 * @param {String} pLinea
 * 
 * @properties={typeid:24,uuid:"0D661D34-27A9-48A6-8108-7F8B35B4E26F"}
 */
function gCabecera(pFs_cab,pLinea)
{
	pFs_cab.newRecord()
	
	pFs_cab.fecha_cbte          = globals.gStringaFecha(pLinea.substring( 1, 9))
	pFs_cab.tipo_cbte           = pLinea.substring( 9, 11)
	globals.gTipo_doc			= pLinea.substring( 9, 11) //guarda para cod barras
	if (pFs_cab.tipo_cbte < 4)
	{
		globals.gLetra = "A"
	}
	else
	{
		globals.gLetra = "B"
	}
	pFs_cab.punto_vta           = pLinea.substring( 11, 15)
	globals.gSucursal			= pLinea.substring( 11, 15) //guarda para cod barras
	pFs_cab.cbt_desde           = pLinea.substring( 15, 23)
	pFs_cab.cbt_hasta           = pLinea.substring( 23, 31)
	pFs_cab.concepto            = parseInt(pLinea[31])
	pFs_cab.tipo_doc            = pLinea.substring( 32, 34)
	
	pFs_cab.nro_doc	            = pLinea.substring( 34, 45)
	pFs_cab.importe_total       = pLinea.substring( 45, 60) / 100
	pFs_cab.importe_total_conc  = pLinea.substring( 75, 90) / 100
	pFs_cab.importe_neto        = pLinea.substring( 90, 105) / 100
	pFs_cab.importe_iva         = pLinea.substring( 105, 120) / 100
	pFs_cab.importe_trib        = pLinea.substring( 120, 135) / 100
	pFs_cab.importe_op_ex       = pLinea.substring( 135, 150) / 100
	pFs_cab.moneda_id           = pLinea.substring( 150, 153)
	pFs_cab.moneda_ctz	        = pLinea.substring( 153, 163) / 1000000
	pFs_cab.fecha_venc_pago     = globals.gStringaFecha(pLinea.substring( 163, 171))
	pFs_cab.cae	                = globals.gCae
	pFs_cab.fecha_venc_cae      = globals.gFechaVtoCae.substr(6,2)+'/'+globals.gFechaVtoCae.substr(4,2)+'/'+globals.gFechaVtoCae.substr(0,4)
	
	globals.gCodigo_afip()
	
	pFs_cab.codigo_afip			= globals.gCod_final
	pFs_cab.importe_en_letras	= globals.nro_a_letra(pFs_cab.importe_total)
}

/**
 * @properties={typeid:24,uuid:"A008F1B1-5745-4C9A-8397-0DC42583B2E2"}
 */
function gStringaFecha(pString)
{
	//año , mes dia
	if (pString != '00000000')
	{
		var fecha = new Date ()
		fecha.setFullYear(pString.substring( 0, 4))
		fecha.setMonth(pString.substring( 4, 6)-1)
		fecha.setDate(pString.substring( 6, 8))
		return fecha
	}
	return null
}

/**
 * @properties={typeid:24,uuid:"BC03F2D7-D346-4AD2-A9A5-A8B79072AB23"}
 */
function gIva(pFs_cab,pLinea)
{
	pFs_cab.factura_cab_to_iva_factura.newRecord()
	
	pFs_cab.factura_cab_to_iva_factura.codigo 		= pLinea.substring( 1, 17)
	pFs_cab.factura_cab_to_iva_factura.base_importe	= pLinea.substring( 17, 32) / 100
	pFs_cab.factura_cab_to_iva_factura.importe		= pLinea.substring( 32, 47) / 100
}

/**
 * @properties={typeid:24,uuid:"D410CDA4-E0D8-4D5E-B9FF-4578074E3BBB"}
 */
function gCbte(pFs_cab,pLinea)
{
	pFs_cab.factura_cab_to_cbte_asoc.newRecord()
	
	pFs_cab.factura_cab_to_cbte_asoc.nro		= pLinea.substring( 1, 4)
	pFs_cab.factura_cab_to_cbte_asoc.pto_vta	= pLinea.substring( 4, 8)
	pFs_cab.factura_cab_to_cbte_asoc.tipo		= pLinea.substring( 8, 16)
}

/**
 * @properties={typeid:24,uuid:"E07F5283-6421-423F-ADBF-3EB34A02555A"}
 */
function gDetalle(pFs_cab,pLinea)
{
	pFs_cab.factura_cab_to_factura_dtl.newRecord()
	
	pFs_cab.factura_cab_to_factura_dtl.u_mtx				= 0 // no se usa - pLinea.substring( 1, 11)
	pFs_cab.factura_cab_to_factura_dtl.cod_mtx              = pLinea.substring( 11, 41)
	pFs_cab.factura_cab_to_factura_dtl.codigo               = pLinea.substring( 41, 71)
	pFs_cab.factura_cab_to_factura_dtl.cantidad             = pLinea.substring( 71, 86) / 1000
	pFs_cab.factura_cab_to_factura_dtl.umed                 = 0  // no se usa - pLinea.substring( 86, 89)
	pFs_cab.factura_cab_to_factura_dtl.precio               = pLinea.substring( 89, 104) / 1000
	pFs_cab.factura_cab_to_factura_dtl.bonif                = pLinea.substring( 104, 119) / 1000
	pFs_cab.factura_cab_to_factura_dtl.iva_id               = pLinea.substring( 119, 122)
	pFs_cab.factura_cab_to_factura_dtl.importe_iva          = pLinea.substring( 122, 137) / 100
	pFs_cab.factura_cab_to_factura_dtl.importe_subtotal     = pLinea.substring( 137, 152) / 100
	pFs_cab.factura_cab_to_factura_dtl.descripcion          = pLinea.substring( 152, 4152)
}

/**
 * @properties={typeid:24,uuid:"81A49040-298B-47D0-9794-7B1C1C2FB3C6"}
 */
function leerArchivo() {
	var path = globals.gArchProceso
	var fr = new Packages.java.io.FileReader(path);
	var br = new Packages.java.io.BufferedReader(fr);
	
	var path2 = globals.gArchEntrada
	var fw = new Packages.java.io.FileWriter(path2)
	var bw = new Packages.java.io.BufferedWriter(fw);
	
	var linea = utils.stringTrim(br.readLine())
	while (linea != null && linea[0] < '4')
	{
		bw.write(linea,0,linea.length)
		bw.newLine()
		linea = utils.stringTrim(br.readLine())
	}
	
	bw.close()
	fw.close()
	br.close()
	fr.close()
}

/**
 * @properties={typeid:24,uuid:"D3AD2DCE-799D-4EE2-9B06-D720030073CE"}
 */
function gCabecera_2(pFs_cab,pLinea) {
	pFs_cab.fecha_emision_reg_9 = pLinea.substring( 1, 11)
	pFs_cab.razon_social      	= pLinea.substring( 11, 41)
	pFs_cab.zona           		= pLinea.substring( 41, 44)
	pFs_cab.procedencia       	= pLinea.substring( 44, 53)
	pFs_cab.cliente           	= pLinea.substring( 53, 59)
	pFs_cab.cuit           		= pLinea.substring( 59, 73)
	pFs_cab.fecha_vto           = pLinea.substring( 73, 83)
	pFs_cab.direccion           = pLinea.substring( 83, 113)
	pFs_cab.localidad           = pLinea.substring( 113, 133)
	pFs_cab.cod_postal          = pLinea.substring( 133, 143)
	pFs_cab.provincia           = pLinea.substring( 143, 157)
	pFs_cab.pais           		= pLinea.substring( 157, 172)
	pFs_cab.iva_descrip    	    = pLinea.substring( 172, 202)
	pFs_cab.ing_brutos          = pLinea.substring( 202, 216)
	pFs_cab.con_pago         	= pLinea.substring( 216, 246)
	pFs_cab.expreso           	= pLinea.substring( 246, 277)
	pFs_cab.comentario          = pLinea.substring( 277, 327)
	pFs_cab.leyenda_1           = pLinea.substring( 327, 382)
	pFs_cab.ley_retencion       = pLinea.substring( 382, 397)
	pFs_cab.porc_retencion      = pLinea.substring( 397, 403)
	pFs_cab.porc_retencion_2    = pLinea.substring( 403, 404)
	pFs_cab.importe_retencion  	= pLinea.substring( 404, 418)
	pFs_cab.ley_dnb          	= pLinea.substring( 418, 422)
	pFs_cab.nro_dnb          	= pLinea.substring( 422, 429)
	pFs_cab.porc_dto           	= pLinea.substring( 429, 435)
	pFs_cab.importe_dto        	= pLinea.substring( 435, 449)
	pFs_cab.subtotal           	= pLinea.substring( 449, 463)
	pFs_cab.ley_iva_ri        	= pLinea.substring( 463, 469)
	pFs_cab.iva_insc           	= pLinea.substring( 469, 483)
	pFs_cab.ley_iva_rni        	= pLinea.substring( 483, 489)
	pFs_cab.ley_iva_x_art       = pLinea.substring( 489, 490)
	pFs_cab.iva_no_insc       	= pLinea.substring( 490, 504)
	pFs_cab.total_factura     	= pLinea.substring( 504, 518)
}

/**
 * @properties={typeid:24,uuid:"982680C4-D750-4F18-8DE6-7ADA3E79DF45"}
 */
function verificar_cae(pArchivo) {
	var fr = new Packages.java.io.FileReader(pArchivo);
	var br = new Packages.java.io.BufferedReader(fr);
	
	var linea = br.readLine()
	if (linea == null)
	{
		if (gempresa_to_empresas.modo_rechazo == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Error al leer linea en archivo ' + pArchivo,'OK')
		}
		br.close();
		fr.close();
		return 1
	}
	else
	{		
		globals.gTipoCbte = utils.stringToNumber(linea.substring( 9, 11))
		globals.gPtoVenta = utils.stringToNumber(linea.substring( 11, 15))
		globals.gNroCbte  = utils.stringToNumber(linea.substring( 15, 23))
		if (linea[193] != "A")
		{
			if (gempresa_to_empresas.modo_rechazo == 1)
			{
				globals.DIALOGS.showWarningDialog('Aviso','Comprobante de tipo ' + globals.gTipoCbte + ' y número ' + globals.gNroCbte + ' RECHAZADO','OK')
			}
			br.close();
			fr.close();
			return 1	
		}
		else
		{
			globals.gCae    		 = linea.substring( 171, 185)
			globals.gFechaVtoCae  	 = linea.substring( 185, 193)
		}
	}
	br.close();
	fr.close();
	return 0
}

/**
 * @param {Number} tipo_cbte
 * @param {Number} nro_cbte
 * @param {String} cae
 * @param {String} arch
 * @param {String} salida
 * @param {String} logfile
 * @param {String} fechavto_cae
 * @param {Number} pto_venta
 * 
 * @properties={typeid:24,uuid:"7D1ED830-1586-4478-BAF8-2A6C2C42CEC7"}
 */
function gGrabarLog(tipo_cbte, nro_cbte, cae, arch, salida, logfile, fechavto_cae, pto_venta) {
	/** @type {JSFoundSet<db:/factura_electronica/log_operaciones>} */
	var fslog = databaseManager.getFoundSet("factura_electronica","log_operaciones")
	fslog.newRecord()
	fslog.tipo_cpbte		= tipo_cbte
	fslog.punto_vta			= pto_venta
	fslog.numero_cpbte		= nro_cbte
	fslog.cae				= cae
	if (fechavto_cae)
		fslog.fechavto_cae	= new Date(fechavto_cae.substr(0,4)*1,fechavto_cae.substr(4,2)*1,fechavto_cae.substr(6,2)*1)
	fslog.nom_archivo		= arch
	fslog.salida_recibida	= salida
	fslog.logfile_recibido	= logfile
	fslog.empresa_id		= globals.gEmpresa
	
	var estado = databaseManager.saveData()
	if (estado == false)
	{
		databaseManager.revertEditedRecords()
		if (gempresa_to_empresas.modo_rechazo == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Error al grabar Log','OK')
		}
		return 1
	}
	return 0
}

/**
 * @properties={typeid:24,uuid:"13279DB7-159C-45D9-87F5-E78EF15934A0"}
 */
function gCodigo_afip() {
	//declaro todas las variables para encadenarlas luego
	var cuit = null
	var tipo_doc
	var sucursal
	var cai
	//var fecha_venc
	var digito_verif
	var cod_final
	
	//edito las variables para que queden 40 caracteres
	//CUIT: Filtro los guiones dentro del campo
	
	//cuit = gempresa_to_empresas.cuit 
	cuit = utils.numberFormat(utils.stringToNumber(gempresa_to_empresas.cuit),'00000000000')
	
	if (cuit.length != 11)
	{
		if (gempresa_to_empresas.modo_rechazo == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Error en longitud del CUIT propio' + cuit,'OK')
		}
		return 1
	}
	
	//TIPO_DOC: tengo que agregarle un 0 antes de poner el tipo_doc
	tipo_doc = globals.gTipo_doc
	if (tipo_doc.length != 2)
	{
		if (gempresa_to_empresas.modo_rechazo == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Error en longitud tipo_doc' + tipo_doc,'OK')
		}
		return 1
	}
		
	//SUCURSAL
	sucursal = utils.numberFormat(globals.gSucursal,'0000')
	if (sucursal.length != 4)
	{
		if (gempresa_to_empresas.modo_rechazo == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Error en longitud sucursal' + sucursal.length ,'OK')
		}
		return 1
	}
	//CAI
	cai = globals.gCae
	if (cai.length != 14)
	{
		if (gempresa_to_empresas.modo_rechazo == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Error en longitud CAE' + cai.length ,'OK')
		}
		return 1
	}
	//FECHA DE VENCIMIENTO: tengo que ponerlo en formato aaaa/MM/dd sin las '/'
	//fecha_venc = fecha_venc_cae
	var f = globals.gFechaVtoCae
	/* var f = utils.dateFormat(fecha_venc, 'yyyyMMdd')*/
	if (f.length != 8)
	{
		if (gempresa_to_empresas.modo_rechazo == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Error en longitud fecha vto cae' + f.length ,'OK')
		}
		return 1
	}
		
	//DIGITO VERIFICADOR: segun reglas de AFIP
	cod_final 		= cuit.concat(tipo_doc.concat(sucursal.concat(cai.concat(f))))
	digito_verif 	= globals.gRutinaDigVerif (cod_final)
	//concateno todo en el campo CodigoAFIP de la tabla
	cod_final 		=  cod_final.concat(''+digito_verif)
	if (cod_final.length != 40)
	{
		if (gempresa_to_empresas.modo_rechazo == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Error en longitud código final' + cod_final.length ,'OK')
		}
		globals.gCod_final = null
		return 1
	}
	else
	{
		globals.gCod_final = cod_final
	}	
	
	return 0
}

/**
 * @properties={typeid:24,uuid:"BADCFE8C-253C-4208-94AC-F668023CEEB0"}
 */
function gRutinaDigVerif(cod) {
	var res
	var pares = 0, impares = 0
	//var cod = arguments[0]
	var i, n
	
	i = 0
	while (i<38)
	{	
		n = utils.stringToNumber(cod[i])
		impares += n
		n = utils.stringToNumber(cod[i+1])
		pares += n
		i += 2
	}
	n = utils.stringToNumber(cod[i])
	impares += n
	res = impares *3
	res += pares
	res = 10 - (res % 10)
	if (res == 10)
		res = 0
	return res
}

/**
 * Callback method for when solution is opened.
 * When deeplinking into solutions, the argument part of the deeplink url will be passed in as the first argument
 * All query parameters + the argument of the deeplink url will be passed in as the second argument
 * For more information on deeplinking, see the chapters on the different Clients in the Deployment Guide.
 *
 * @param {String} arg startup argument part of the deeplink url with which the Client was started
 * @param {Object<Array<String>>} queryParams all query parameters of the deeplink url with which the Client was started
 *
 * @properties={typeid:24,uuid:"41FDE260-58C7-40F5-8670-F21032B0BC40"}
 */
function onSolutionOpen(arg, queryParams) {
	if (security.getUserUID() == 0)
	{
		forms.empresa_alta.controller.show()
	}
	else
	{
		globals.gEmpresa = security.getUserUID()
		databaseManager.addTableFilterParam('factura_electronica',null,'empresa_id','=',globals.gEmpresa,'FILTRO_EMPRESA')
		globals.gRelacion 	= gempresa_to_empresas
		globals.gCampos 	= 'path'
		
		if (gempresa_to_empresas.modo_rechazo == null)
		{
			gempresa_to_empresas.modo_rechazo = 1
		}
	}
}
